package io.github.talelin.latticy.controller.v1;


import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.github.talelin.core.annotation.GroupRequired;
import io.github.talelin.core.annotation.PermissionMeta;
import io.github.talelin.core.annotation.PermissionModule;
import io.github.talelin.latticy.common.util.PageUtil;
import io.github.talelin.latticy.dto.stock.BatchStockLogPageDTO;
import io.github.talelin.latticy.dto.stock.BatchStockLogVO;
import io.github.talelin.latticy.model.BatchStockLogDO;
import io.github.talelin.latticy.service.BatchStockLogService;
import io.github.talelin.latticy.util.PageHelpUtil;
import io.github.talelin.latticy.vo.PageResponseVO;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Objects;

/**
 * 库存日志前端控制器
 *
 * @author generator@wulongbo
 * @since 2022-06-28
 */
@RestController
@RequestMapping("/v1/batchStockLog")
@PermissionModule(value = "库存日志")
public class BatchStockLogController {

    @Resource
    private BatchStockLogService batchStockLogService;

    @GetMapping("/page")
    @PermissionMeta(value = "库存日志查询")
    @GroupRequired
    public PageResponseVO<BatchStockLogVO> page(@Validated BatchStockLogPageDTO batchStockLogPageDTO) {
        Page<BatchStockLogDO> page = batchStockLogService.page(new Page<>(batchStockLogPageDTO.getCurrPage(), batchStockLogPageDTO.getPageSize()), new LambdaQueryWrapper<BatchStockLogDO>()
                .eq(StrUtil.isNotEmpty(batchStockLogPageDTO.getWarehouseCode()), BatchStockLogDO::getWarehouseCode, batchStockLogPageDTO.getWarehouseCode())
                .eq(StrUtil.isNotEmpty(batchStockLogPageDTO.getOperType()), BatchStockLogDO::getOperateType, batchStockLogPageDTO.getOperType())
                .like(StrUtil.isNotEmpty(batchStockLogPageDTO.getOrderNo()), BatchStockLogDO::getOrderNo, batchStockLogPageDTO.getOrderNo())
                .like(StrUtil.isNotEmpty(batchStockLogPageDTO.getLocation()), BatchStockLogDO::getLocation, batchStockLogPageDTO.getLocation())
                .like(StrUtil.isNotEmpty(batchStockLogPageDTO.getSku()), BatchStockLogDO::getSku, batchStockLogPageDTO.getSku())
                .between(Objects.nonNull(batchStockLogPageDTO.getCreateTimeStart()) && Objects.nonNull(batchStockLogPageDTO.getCreateTimeEnd()), BatchStockLogDO::getCreateTime,
                        batchStockLogPageDTO.getCreateTimeStart(), batchStockLogPageDTO.getCreateTimeEnd()));
        return PageUtil.build(PageHelpUtil.convertPage(page, BatchStockLogVO.class));
    }

}
